/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.util.ArrayList;

/**
 *
 * @author juanan
 */
public class ModeloGrafica
{
      private int alimentoInicial;
      private int diaAlimentoMax;
      private int alimentoMax;
      private int alimentoFinal;
      private int maximoDias=29000;
      private int minimoDias=10;
      private int maximoAlimento=30000;
      private int minimoAlimento=0;


      private ArrayList<ModeloGraficaListener> listenerList;
      
      public ModeloGrafica()
      {
          maximoDias=390;
          minimoDias=10;
          maximoAlimento=300;
          minimoAlimento=0;
          listenerList = new ArrayList<ModeloGraficaListener>();
      }
    /**
     * @return the tfAlimentoInicial
     */
    public int getAlimentoInicial() 
    {
        return alimentoInicial;
    }

    /**
     * @param tfAlimentoInicial the tfAlimentoInicial to set
     */
    public void setAlimentoInicial(int alimentoInicial) 
    {
        if(alimentoInicial<minimoAlimento||alimentoInicial>getMaximoAlimento()||alimentoInicial>alimentoMax)
        {
            if (alimentoInicial<minimoAlimento)
            {
                this.alimentoInicial=minimoAlimento;
            }
            else
            {
                if (alimentoInicial>getMaximoAlimento())
                {
                    this.alimentoInicial=getMaximoAlimento();
                }
                if(alimentoInicial>alimentoMax)
                {
                    this.alimentoInicial=alimentoMax;
                }
            }
        }
        else
        {
          this.alimentoInicial = alimentoInicial;
        }
        fireMovementPerformed();
    }

    /**
     * @return the tfDiaAlimentoMax
     */
    public int getDiaAlimentoMax() 
    {
        return diaAlimentoMax;
    }

    /**
     * @param tfDiaAlimentoMax the tfDiaAlimentoMax to set
     */
    public void setDiaAlimentoMax(int diaAlimentoMax)
    {
        if (diaAlimentoMax<=minimoDias||diaAlimentoMax>=getMaximoAlimento())
        {
            if (diaAlimentoMax<=minimoDias)
            {
                this.diaAlimentoMax=minimoDias;
            }
            else
            {
                this.diaAlimentoMax=getMaximoDias();
            }
        }
        else
        {
            this.diaAlimentoMax = diaAlimentoMax;
        }
        fireMovementPerformed();
    }

    /**
     * @return the tfAlimentoMax
     */
    public int getAlimentoMax() 
    {
        return alimentoMax;
    }

    /**
     * @param tfAlimentoMax the tfAlimentoMax to set
     */
    public void setAlimentoMax(int alimentoMax) 
    {
        int max;
        if (alimentoInicial>alimentoFinal)
        {
            max=alimentoInicial;
        }
        else
        {
            max=alimentoFinal;
        }
        if(alimentoMax<minimoAlimento||alimentoMax>getMaximoAlimento()||alimentoMax<max)
        {
            if (alimentoMax<=minimoAlimento&&max==minimoAlimento)
            {
                this.alimentoMax=minimoAlimento;
            }
            else
            {
                    if(alimentoMax>getMaximoAlimento())
                    {
                    this.alimentoMax=getMaximoAlimento();
                    }
                    if (alimentoMax<max)
                    {
                        this.alimentoMax=max;
                    }  
            }
        }
        else
        {
          this.alimentoMax = alimentoMax;
        }
        fireMovementPerformed();
    }




    /**
     * @return the alimentoFinal
     */
    public int getAlimentoFinal() {
        return alimentoFinal;
    }

    /**
     * @param alimentoFinal the alimentoFinal to set
     */
    public void setAlimentoFinal(int alimentoFinal)
    {
        if(alimentoFinal<minimoAlimento||alimentoFinal>getMaximoAlimento()||alimentoFinal>alimentoMax)
        {
            if (alimentoFinal<minimoAlimento)
            {
                this.alimentoFinal=minimoAlimento;
            }
            else
            {
                if (alimentoFinal>getMaximoAlimento())
                {
                    this.alimentoFinal=getMaximoAlimento();
                }
                if(alimentoFinal>alimentoMax)
                {
                    this.alimentoFinal=alimentoMax;
                }
            }
        }
        else
        {
          this.alimentoFinal = alimentoFinal;
        }
        fireMovementPerformed();
    }
    
    protected void fireMovementPerformed() 
    {
        for (int i =0; i <listenerList.size(); i++) 
        {
                listenerList.get(i).movementPerformed(); 
        }
    }

    /**
     * @return the maximoDias
     */
    public int getMaximoDias() {
        return maximoDias;
    }

    /**
     * @param maximoDias the maximoDias to set
     */
    public void setMaximoDias(int maximoDias) {
        this.maximoDias = maximoDias;
    }

    /**
     * @return the maximoAlimento
     */
    public int getMaximoAlimento() {
        return maximoAlimento;
    }

    /**
     * @param maximoAlimento the maximoAlimento to set
     */
    public void setMaximoAlimento(int maximoAlimento) {
        this.maximoAlimento = maximoAlimento;
    }
    
    public void addInterfazListener(ModeloGraficaListener l)
    {
        listenerList.add(l);
    }

}
